package main

import "fmt"

func cal(num1 int, num2 int) int { //返回一个值，括号可以省略
	var sum int = 0
	sum += num1
	sum += num2
	return sum
}

func delegate(num1 int, num2 int, testFun func(int,int) int){
	sum:=testFun(num1, num2)
	fmt.Println(sum)
}

func test(args...int){//args当切片处理
	fmt.Println(args)

}
func main() {
	sum := cal(10, 20)
	fmt.Println(sum)
	sum = cal(101, 20)
	fmt.Println(sum)
	test(1,2)
	test(1,2,3,4)
	//函数别名
	c:=cal
	delegate(3,4,c)
	delegate(3,4,cal)
	r1,r2:=test1(6,3)
	fmt.Printf("%v and %v\n", r1,r2)
	r1,r2=test2(6,3)
	fmt.Printf("%v and %v", r1,r2)
}
//类型别名,但编译时，不会与int当成同一类型，变量相互传值要强转
type myInt int

func test1(num1 int, num2 int) (int,int){
	res1:=num1+num2
	res2:=num1-num2
	return res1,res2
}
func test2(num1 int, num2 int) (sum int,sub int){
	sum=num1+num2
	sub=num1-num2
	return
}


/* 【遵循标识符命名规范】:
	见名知意 addNum,驼峰命名addNum
	首字母不能是数字
	首字母大写该函数可以被本包文件和复它包文件使用(类似 public)
	首学母小写只能被本包文件使用，其它包文件不能使用(类似 private)
	【注意事项】
	1.不支持重载
	2.支持可变参数
*/
